package com.campus.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;

/**
 * @desc: JWT工具类，用于生成和解析JWT Token
 * @author: hjm
 * @date: 2024/11/22
 */
public class JwtUtil {

    // 使用HS256算法生成密钥
    private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    // Token 有效期 (1 小时)
    private static final long EXPIRATION_TIME = 3600000;

    /**
     * 生成JWT Token
     * @param loginname 用户登录名
     * @return 生成的JWT Token
     */
    public static String generateToken(String loginname) {
        return Jwts.builder()
                .setSubject(loginname) // 设置主题为用户登录名
                .setIssuedAt(new Date()) // 设置签发时间为当前时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置过期时间为当前时间加上有效期
                .signWith(SECRET_KEY) // 使用密钥进行签名
                .compact(); // 生成Token
    }

    /**
     * 解析JWT Token
     * @param token JWT Token
     * @return 解析后的Claims对象
     */
    public static Claims parseToken(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(SECRET_KEY) // 设置签名密钥
                .build()
                .parseClaimsJws(token) // 解析Token
                .getBody(); // 获取Claims对象
    }
}